package com.song.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayDeque;


@Configuration
@EnableSwagger2 //开启Swagger2  默认访问路径：http://localhost:8080/swagger-ui/    哭Could not render n, see the console.
public class SwaggerConfig {


    // 配置 swagger 分组
    // 扫描不同包、注解...可以放在不同组里面
    @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("组A");
    }
    // 配置 swagger 分组
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("组B");
    }
    // 配置 swagger 分组
    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("组C");
    }



    // 配置swagger的 Docket 摘要
    @Bean
    public Docket createRestApi(Environment environment){

        //实现效果：只希望swagger在生产\测试环境的时候使用，在正式环境不使用，怎么处理？
        //设置要显示的Swagger环境
        //http://localhost:8080/swagger-ui/  dev
        //http://localhost:8888/swagger-ui/  test
        //http://localhost:9999/swagger-ui/  prod
        Profiles of = Profiles.of("dev", "test");
        //判断自己当前是否处于显示的环境中
        boolean flag = environment.acceptsProfiles(of);



        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //配置是否启动
                .enable(flag)
                .select()
                //RequestHandlerSelectors 配置要扫描接口方式
                //basePackage:指定要扫描的包
                //any():扫描全部
                //none():不扫描
                //withClassAnnotation(RestController.class):扫描类上的注解，参数是一个注解的反射对象
                //withMethodAnnotation:扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.song.controller")) // 配置要扫描接口
                //paths  过滤了什么路径
                .paths(PathSelectors.any())
                .build()
                .groupName("song");
    }

    // 配置页面信息
    private ApiInfo apiInfo(){
        // 作者信息
        Contact contact = new Contact("宋大米", "https://blog.csdn.net/MS_SONG", "1643137133@qq.com");
        return new ApiInfo("我的系统文档",
                "宋大米创建的",
                "v1.0",
                "https://blog.csdn.net/MS_SONG",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayDeque<>());

        //return new ApiInfoBuilder()
        //        .title("标题")
        //        .description("api接口文档")
        //        .version("1.0") //版本
        //        .build();
    }

}
